#include <DescriptorTables.h>
#include <Kernel.h>
#include <InterruptServiceRoutine.h>
#include <Asm.h>
#include <ProcessManager.h>

extern "C"
{
  void gdtFlush(u32int);
  void idtFlush(u32int);
  void tssFlush();
  void fastSyscallHandler();
}

DescriptorTables::DescriptorTables()
{
  for (int i = 0; i < 256; i++)
  {
    interruptRoutines[i] = NULL;
  }
}


DescriptorTables::~DescriptorTables()
{
}

//
// initGdt -- Initialises the global descriptor table.
//
void DescriptorTables::initGdt()
{
  gdtPtr.limit = (sizeof(GdtEntry) * 6) - 1;
  gdtPtr.base  = (u32int)&gdtEntry;
  
  gdtSetGate(0, 0, 0, 0, 0);                // Null segment
  gdtSetGate(1, 0, 0xFFFFFFFF, 0x9A, 0xCF); // Code segment
  gdtSetGate(2, 0, 0xFFFFFFFF, 0x92, 0xCF); // Data segment
  gdtSetGate(3, 0, 0xFFFFFFFF, 0xFA, 0xCF); // User mode code segment
  gdtSetGate(4, 0, 0xFFFFFFFF, 0xF2, 0xCF); // User mode data segment
  
  writeTss(5, 0x10, 0x500fff, 0);
  
  gdtFlush((u32int)&gdtPtr);
  tssFlush();
}

void DescriptorTables::gdtSetGate(s32int num, u32int base, u32int limit, u8int access, u8int gran)
{
  gdtEntry[num].base_low    = (base & 0xFFFF);
  gdtEntry[num].base_middle = (base >> 16) & 0xFF;
  gdtEntry[num].base_high   = (base >> 24) & 0xFF;
  
  gdtEntry[num].limit_low   = (limit & 0xFFFF);
  gdtEntry[num].granularity = (limit >> 16) & 0x0F;
  
  gdtEntry[num].granularity |= gran & 0xF0;
  gdtEntry[num].access = access;
}

void DescriptorTables::initIdt()
{
  idtPtr.limit = sizeof(IdtEntry) * 256 - 1;
  idtPtr.base  = (u32int)&idtEntry;
  
  for (int i = 0; i < 256; i++)
  {
    idtEntry[i].base_lo = idtEntry[i].base_hi = idtEntry[i].sel = 0;
    idtEntry[i].always0 = idtEntry[i].flags = 0;
  }
  
  idtSetGate(  0, (u32int)isr0  , 0x08, 0x8E);
  idtSetGate(  1, (u32int)isr1  , 0x08, 0x8E);
  idtSetGate(  2, (u32int)isr2  , 0x08, 0x8E);
  idtSetGate(  3, (u32int)isr3  , 0x08, 0x8E);
  idtSetGate(  4, (u32int)isr4  , 0x08, 0x8E);
  idtSetGate(  5, (u32int)isr5  , 0x08, 0x8E);
  idtSetGate(  6, (u32int)isr6  , 0x08, 0x8E);
  idtSetGate(  7, (u32int)isr7  , 0x08, 0x8E);
  idtSetGate(  8, (u32int)isr8  , 0x08, 0x8E);
  idtSetGate(  9, (u32int)isr9  , 0x08, 0x8E);
  idtSetGate( 10, (u32int)isr10 , 0x08, 0x8E);
  idtSetGate( 11, (u32int)isr11 , 0x08, 0x8E);
  idtSetGate( 12, (u32int)isr12 , 0x08, 0x8E);
  idtSetGate( 13, (u32int)isr13 , 0x08, 0x8E);
  idtSetGate( 14, (u32int)isr14 , 0x08, 0x8E);
  idtSetGate( 15, (u32int)isr15 , 0x08, 0x8E);
  idtSetGate( 16, (u32int)isr16 , 0x08, 0x8E);
  idtSetGate( 17, (u32int)isr17 , 0x08, 0x8E);
  idtSetGate( 18, (u32int)isr18 , 0x08, 0x8E);
  idtSetGate( 19, (u32int)isr19 , 0x08, 0x8E);
  idtSetGate( 20, (u32int)isr20 , 0x08, 0x8E);
  idtSetGate( 21, (u32int)isr21 , 0x08, 0x8E);
  idtSetGate( 22, (u32int)isr22 , 0x08, 0x8E);
  idtSetGate( 23, (u32int)isr23 , 0x08, 0x8E);
  idtSetGate( 24, (u32int)isr24 , 0x08, 0x8E);
  idtSetGate( 25, (u32int)isr25 , 0x08, 0x8E);
  idtSetGate( 26, (u32int)isr26 , 0x08, 0x8E);
  idtSetGate( 27, (u32int)isr27 , 0x08, 0x8E);
  idtSetGate( 28, (u32int)isr28 , 0x08, 0x8E);
  idtSetGate( 29, (u32int)isr29 , 0x08, 0x8E);
  idtSetGate( 30, (u32int)isr30 , 0x08, 0x8E);
  idtSetGate( 31, (u32int)isr31 , 0x08, 0x8E);
  // DO NOT MAP 32-47 -- IRQs!
//   idtSetGate( 48, (u32int)isr48 , 0x08, 0x8E);
//   idtSetGate( 49, (u32int)isr49 , 0x08, 0x8E);
  idtSetGate( 50, (u32int)isr50 , 0x08, 0x8E);
  idtSetGate( 51, (u32int)isr51 , 0x08, 0x8E);
//   idtSetGate( 52, (u32int)isr52 , 0x08, 0x8E);
//   idtSetGate( 53, (u32int)isr53 , 0x08, 0x8E);
//   idtSetGate( 54, (u32int)isr54 , 0x08, 0x8E);
//   idtSetGate( 55, (u32int)isr55 , 0x08, 0x8E);
//   idtSetGate( 56, (u32int)isr56 , 0x08, 0x8E);
//   idtSetGate( 57, (u32int)isr57 , 0x08, 0x8E);
//   idtSetGate( 58, (u32int)isr58 , 0x08, 0x8E);
//   idtSetGate( 59, (u32int)isr59 , 0x08, 0x8E);
//   idtSetGate( 60, (u32int)isr60 , 0x08, 0x8E);
//   idtSetGate( 61, (u32int)isr61 , 0x08, 0x8E);
//   idtSetGate( 62, (u32int)isr62 , 0x08, 0x8E);
//   idtSetGate( 63, (u32int)isr63 , 0x08, 0x8E);
//   idtSetGate( 64, (u32int)isr64 , 0x08, 0x8E);
//   idtSetGate( 65, (u32int)isr65 , 0x08, 0x8E);
//   idtSetGate( 66, (u32int)isr66 , 0x08, 0x8E);
//   idtSetGate( 67, (u32int)isr67 , 0x08, 0x8E);
//   idtSetGate( 68, (u32int)isr68 , 0x08, 0x8E);
//   idtSetGate( 69, (u32int)isr69 , 0x08, 0x8E);
//   idtSetGate( 70, (u32int)isr70 , 0x08, 0x8E);
//   idtSetGate( 71, (u32int)isr71 , 0x08, 0x8E);
//   idtSetGate( 72, (u32int)isr72 , 0x08, 0x8E);
//   idtSetGate( 73, (u32int)isr73 , 0x08, 0x8E);
//   idtSetGate( 74, (u32int)isr74 , 0x08, 0x8E);
//   idtSetGate( 75, (u32int)isr75 , 0x08, 0x8E);
//   idtSetGate( 76, (u32int)isr76 , 0x08, 0x8E);
//   idtSetGate( 77, (u32int)isr77 , 0x08, 0x8E);
//   idtSetGate( 78, (u32int)isr78 , 0x08, 0x8E);
//   idtSetGate( 79, (u32int)isr79 , 0x08, 0x8E);
//   idtSetGate( 80, (u32int)isr80 , 0x08, 0x8E);
//   idtSetGate( 81, (u32int)isr81 , 0x08, 0x8E);
//   idtSetGate( 82, (u32int)isr82 , 0x08, 0x8E);
//   idtSetGate( 83, (u32int)isr83 , 0x08, 0x8E);
//   idtSetGate( 84, (u32int)isr84 , 0x08, 0x8E);
//   idtSetGate( 85, (u32int)isr85 , 0x08, 0x8E);
//   idtSetGate( 86, (u32int)isr86 , 0x08, 0x8E);
//   idtSetGate( 87, (u32int)isr87 , 0x08, 0x8E);
//   idtSetGate( 88, (u32int)isr88 , 0x08, 0x8E);
//   idtSetGate( 89, (u32int)isr89 , 0x08, 0x8E);
//   idtSetGate( 90, (u32int)isr90 , 0x08, 0x8E);
//   idtSetGate( 91, (u32int)isr91 , 0x08, 0x8E);
//   idtSetGate( 92, (u32int)isr92 , 0x08, 0x8E);
//   idtSetGate( 93, (u32int)isr93 , 0x08, 0x8E);
//   idtSetGate( 94, (u32int)isr94 , 0x08, 0x8E);
//   idtSetGate( 95, (u32int)isr95 , 0x08, 0x8E);
//   idtSetGate( 96, (u32int)isr96 , 0x08, 0x8E);
//   idtSetGate( 97, (u32int)isr97 , 0x08, 0x8E);
//   idtSetGate( 98, (u32int)isr98 , 0x08, 0x8E);
  idtSetGate( 99, (u32int)isr99 , 0x08, 0x8E);
//   idtSetGate(100, (u32int)isr100, 0x08, 0x8E);
//   idtSetGate(101, (u32int)isr101, 0x08, 0x8E);
//   idtSetGate(102, (u32int)isr102, 0x08, 0x8E);
//   idtSetGate(103, (u32int)isr103, 0x08, 0x8E);
//   idtSetGate(104, (u32int)isr104, 0x08, 0x8E);
//   idtSetGate(105, (u32int)isr105, 0x08, 0x8E);
//   idtSetGate(106, (u32int)isr106, 0x08, 0x8E);
//   idtSetGate(107, (u32int)isr107, 0x08, 0x8E);
//   idtSetGate(108, (u32int)isr108, 0x08, 0x8E);
//   idtSetGate(109, (u32int)isr109, 0x08, 0x8E);
//   idtSetGate(110, (u32int)isr110, 0x08, 0x8E);
//   idtSetGate(111, (u32int)isr111, 0x08, 0x8E);
//   idtSetGate(112, (u32int)isr112, 0x08, 0x8E);
//   idtSetGate(113, (u32int)isr113, 0x08, 0x8E);
//   idtSetGate(114, (u32int)isr114, 0x08, 0x8E);
//   idtSetGate(115, (u32int)isr115, 0x08, 0x8E);
//   idtSetGate(116, (u32int)isr116, 0x08, 0x8E);
//   idtSetGate(117, (u32int)isr117, 0x08, 0x8E);
//   idtSetGate(118, (u32int)isr118, 0x08, 0x8E);
//   idtSetGate(119, (u32int)isr119, 0x08, 0x8E);
//   idtSetGate(120, (u32int)isr120, 0x08, 0x8E);
//   idtSetGate(121, (u32int)isr121, 0x08, 0x8E);
//   idtSetGate(122, (u32int)isr122, 0x08, 0x8E);
//   idtSetGate(123, (u32int)isr123, 0x08, 0x8E);
//   idtSetGate(124, (u32int)isr124, 0x08, 0x8E);
//   idtSetGate(125, (u32int)isr125, 0x08, 0x8E);
//   idtSetGate(126, (u32int)isr126, 0x08, 0x8E);
//   idtSetGate(127, (u32int)isr127, 0x08, 0x8E);
//   idtSetGate(128, (u32int)isr128, 0x08, 0x8E);
//   idtSetGate(129, (u32int)isr129, 0x08, 0x8E);
//   idtSetGate(130, (u32int)isr130, 0x08, 0x8E);
//   idtSetGate(131, (u32int)isr131, 0x08, 0x8E);
//   idtSetGate(132, (u32int)isr132, 0x08, 0x8E);
//   idtSetGate(133, (u32int)isr133, 0x08, 0x8E);
//   idtSetGate(134, (u32int)isr134, 0x08, 0x8E);
//   idtSetGate(135, (u32int)isr135, 0x08, 0x8E);
//   idtSetGate(136, (u32int)isr136, 0x08, 0x8E);
//   idtSetGate(137, (u32int)isr137, 0x08, 0x8E);
//   idtSetGate(138, (u32int)isr138, 0x08, 0x8E);
//   idtSetGate(139, (u32int)isr139, 0x08, 0x8E);
//   idtSetGate(140, (u32int)isr140, 0x08, 0x8E);
//   idtSetGate(141, (u32int)isr141, 0x08, 0x8E);
//   idtSetGate(142, (u32int)isr142, 0x08, 0x8E);
//   idtSetGate(143, (u32int)isr143, 0x08, 0x8E);
//   idtSetGate(144, (u32int)isr144, 0x08, 0x8E);
//   idtSetGate(145, (u32int)isr145, 0x08, 0x8E);
//   idtSetGate(146, (u32int)isr146, 0x08, 0x8E);
//   idtSetGate(147, (u32int)isr147, 0x08, 0x8E);
//   idtSetGate(148, (u32int)isr148, 0x08, 0x8E);
//   idtSetGate(149, (u32int)isr149, 0x08, 0x8E);
//   idtSetGate(150, (u32int)isr150, 0x08, 0x8E);
//   idtSetGate(151, (u32int)isr151, 0x08, 0x8E);
//   idtSetGate(152, (u32int)isr152, 0x08, 0x8E);
//   idtSetGate(153, (u32int)isr153, 0x08, 0x8E);
//   idtSetGate(154, (u32int)isr154, 0x08, 0x8E);
//   idtSetGate(155, (u32int)isr155, 0x08, 0x8E);
//   idtSetGate(156, (u32int)isr156, 0x08, 0x8E);
//   idtSetGate(157, (u32int)isr157, 0x08, 0x8E);
//   idtSetGate(158, (u32int)isr158, 0x08, 0x8E);
//   idtSetGate(159, (u32int)isr159, 0x08, 0x8E);
//   idtSetGate(160, (u32int)isr160, 0x08, 0x8E);
//   idtSetGate(161, (u32int)isr161, 0x08, 0x8E);
//   idtSetGate(162, (u32int)isr162, 0x08, 0x8E);
//   idtSetGate(163, (u32int)isr163, 0x08, 0x8E);
//   idtSetGate(164, (u32int)isr164, 0x08, 0x8E);
//   idtSetGate(165, (u32int)isr165, 0x08, 0x8E);
//   idtSetGate(166, (u32int)isr166, 0x08, 0x8E);
//   idtSetGate(167, (u32int)isr167, 0x08, 0x8E);
//   idtSetGate(168, (u32int)isr168, 0x08, 0x8E);
//   idtSetGate(169, (u32int)isr169, 0x08, 0x8E);
//   idtSetGate(170, (u32int)isr170, 0x08, 0x8E);
//   idtSetGate(171, (u32int)isr171, 0x08, 0x8E);
//   idtSetGate(172, (u32int)isr172, 0x08, 0x8E);
//   idtSetGate(173, (u32int)isr173, 0x08, 0x8E);
//   idtSetGate(174, (u32int)isr174, 0x08, 0x8E);
//   idtSetGate(175, (u32int)isr175, 0x08, 0x8E);
//   idtSetGate(176, (u32int)isr176, 0x08, 0x8E);
//   idtSetGate(177, (u32int)isr177, 0x08, 0x8E);
//   idtSetGate(178, (u32int)isr178, 0x08, 0x8E);
//   idtSetGate(179, (u32int)isr179, 0x08, 0x8E);
//   idtSetGate(180, (u32int)isr180, 0x08, 0x8E);
//   idtSetGate(181, (u32int)isr181, 0x08, 0x8E);
//   idtSetGate(182, (u32int)isr182, 0x08, 0x8E);
//   idtSetGate(183, (u32int)isr183, 0x08, 0x8E);
//   idtSetGate(184, (u32int)isr184, 0x08, 0x8E);
//   idtSetGate(185, (u32int)isr185, 0x08, 0x8E);
//   idtSetGate(186, (u32int)isr186, 0x08, 0x8E);
//   idtSetGate(187, (u32int)isr187, 0x08, 0x8E);
//   idtSetGate(188, (u32int)isr188, 0x08, 0x8E);
//   idtSetGate(189, (u32int)isr189, 0x08, 0x8E);
//   idtSetGate(190, (u32int)isr190, 0x08, 0x8E);
//   idtSetGate(191, (u32int)isr191, 0x08, 0x8E);
//   idtSetGate(192, (u32int)isr192, 0x08, 0x8E);
//   idtSetGate(193, (u32int)isr193, 0x08, 0x8E);
//   idtSetGate(194, (u32int)isr194, 0x08, 0x8E);
//   idtSetGate(195, (u32int)isr195, 0x08, 0x8E);
//   idtSetGate(196, (u32int)isr196, 0x08, 0x8E);
//   idtSetGate(197, (u32int)isr197, 0x08, 0x8E);
//   idtSetGate(198, (u32int)isr198, 0x08, 0x8E);
//   idtSetGate(199, (u32int)isr199, 0x08, 0x8E);
//   idtSetGate(200, (u32int)isr200, 0x08, 0x8E);
//   idtSetGate(201, (u32int)isr201, 0x08, 0x8E);
//   idtSetGate(202, (u32int)isr202, 0x08, 0x8E);
//   idtSetGate(203, (u32int)isr203, 0x08, 0x8E);
//   idtSetGate(204, (u32int)isr204, 0x08, 0x8E);
//   idtSetGate(205, (u32int)isr205, 0x08, 0x8E);
//   idtSetGate(206, (u32int)isr206, 0x08, 0x8E);
//   idtSetGate(207, (u32int)isr207, 0x08, 0x8E);
//   idtSetGate(208, (u32int)isr208, 0x08, 0x8E);
//   idtSetGate(209, (u32int)isr209, 0x08, 0x8E);
//   idtSetGate(210, (u32int)isr210, 0x08, 0x8E);
//   idtSetGate(211, (u32int)isr211, 0x08, 0x8E);
//   idtSetGate(212, (u32int)isr212, 0x08, 0x8E);
//   idtSetGate(213, (u32int)isr213, 0x08, 0x8E);
//   idtSetGate(214, (u32int)isr214, 0x08, 0x8E);
//   idtSetGate(215, (u32int)isr215, 0x08, 0x8E);
//   idtSetGate(216, (u32int)isr216, 0x08, 0x8E);
//   idtSetGate(217, (u32int)isr217, 0x08, 0x8E);
//   idtSetGate(218, (u32int)isr218, 0x08, 0x8E);
//   idtSetGate(219, (u32int)isr219, 0x08, 0x8E);
//   idtSetGate(220, (u32int)isr220, 0x08, 0x8E);
//   idtSetGate(221, (u32int)isr221, 0x08, 0x8E);
//   idtSetGate(222, (u32int)isr222, 0x08, 0x8E);
//   idtSetGate(223, (u32int)isr223, 0x08, 0x8E);
//   idtSetGate(224, (u32int)isr224, 0x08, 0x8E);
//   idtSetGate(225, (u32int)isr225, 0x08, 0x8E);
//   idtSetGate(226, (u32int)isr226, 0x08, 0x8E);
//   idtSetGate(227, (u32int)isr227, 0x08, 0x8E);
//   idtSetGate(228, (u32int)isr228, 0x08, 0x8E);
//   idtSetGate(229, (u32int)isr229, 0x08, 0x8E);
//   idtSetGate(230, (u32int)isr230, 0x08, 0x8E);
//   idtSetGate(231, (u32int)isr231, 0x08, 0x8E);
//   idtSetGate(232, (u32int)isr232, 0x08, 0x8E);
//   idtSetGate(233, (u32int)isr233, 0x08, 0x8E);
//   idtSetGate(234, (u32int)isr234, 0x08, 0x8E);
//   idtSetGate(235, (u32int)isr235, 0x08, 0x8E);
//   idtSetGate(236, (u32int)isr236, 0x08, 0x8E);
//   idtSetGate(237, (u32int)isr237, 0x08, 0x8E);
//   idtSetGate(238, (u32int)isr238, 0x08, 0x8E);
//   idtSetGate(239, (u32int)isr239, 0x08, 0x8E);
//   idtSetGate(240, (u32int)isr240, 0x08, 0x8E);
//   idtSetGate(241, (u32int)isr241, 0x08, 0x8E);
//   idtSetGate(242, (u32int)isr242, 0x08, 0x8E);
//   idtSetGate(243, (u32int)isr243, 0x08, 0x8E);
//   idtSetGate(244, (u32int)isr244, 0x08, 0x8E);
//   idtSetGate(245, (u32int)isr245, 0x08, 0x8E);
//   idtSetGate(246, (u32int)isr246, 0x08, 0x8E);
//   idtSetGate(247, (u32int)isr247, 0x08, 0x8E);
//   idtSetGate(248, (u32int)isr248, 0x08, 0x8E);
//   idtSetGate(249, (u32int)isr249, 0x08, 0x8E);
//   idtSetGate(250, (u32int)isr250, 0x08, 0x8E);
//   idtSetGate(251, (u32int)isr251, 0x08, 0x8E);
//   idtSetGate(252, (u32int)isr252, 0x08, 0x8E);
//   idtSetGate(253, (u32int)isr253, 0x08, 0x8E);
//   idtSetGate(254, (u32int)isr254, 0x08, 0x8E);
//   idtSetGate(255, (u32int)isr255, 0x08, 0x8E);
  
    idtFlush((u32int)&idtPtr);
  
}

void DescriptorTables::initIrq()
{
  // Remap the irq table.
  outb(0x20, 0x11);
  outb(0xA0, 0x11);
  outb(0x21, 0x20);
  outb(0xA1, 0x28);
  outb(0x21, 0x04);
  outb(0xA1, 0x02);
  outb(0x21, 0x01);
  outb(0xA1, 0x01);
  outb(0x21, 0x0);
  outb(0xA1, 0x0);
  
  idtSetGate( 32, (u32int)irq0 , 0x08, 0x8E);
  idtSetGate( 33, (u32int)irq1 , 0x08, 0x8E);
  idtSetGate( 34, (u32int)irq2 , 0x08, 0x8E);
  idtSetGate( 35, (u32int)irq3 , 0x08, 0x8E);
  idtSetGate( 36, (u32int)irq4 , 0x08, 0x8E);
  idtSetGate( 37, (u32int)irq5 , 0x08, 0x8E);
  idtSetGate( 38, (u32int)irq6 , 0x08, 0x8E);
  idtSetGate( 39, (u32int)irq7 , 0x08, 0x8E);
  idtSetGate( 40, (u32int)irq8 , 0x08, 0x8E);
  idtSetGate( 41, (u32int)irq9 , 0x08, 0x8E);
  idtSetGate( 42, (u32int)irq10, 0x08, 0x8E);
  idtSetGate( 43, (u32int)irq11, 0x08, 0x8E);
  idtSetGate( 44, (u32int)irq12, 0x08, 0x8E);
  idtSetGate( 45, (u32int)irq13, 0x08, 0x8E);
  idtSetGate( 46, (u32int)irq14, 0x08, 0x8E);
  idtSetGate( 47, (u32int)irq15, 0x08, 0x8E);
}

void DescriptorTables::idtSetGate(u8int num, u32int base, u16int sel, u8int flags)
{
  idtEntry[num].base_lo = base & 0xFFFF;
  idtEntry[num].base_hi = (base >> 16) & 0xFFFF;
  
  idtEntry[num].sel     = sel;
  idtEntry[num].always0 = 0;
  idtEntry[num].flags   = flags | 0x60; // DPL = 3
}

void DescriptorTables::writeTss(s32int num, u16int ss0, u32int esp0, u16int iomap_base)
{
  u32int base  = (u32int)&tssEntry;
  u32int limit = base + sizeof(TssEntry);
  gdtEntry[num].base_low    = base & 0xFFFF;
  gdtEntry[num].base_middle = (base >> 16) & 0xFF;
  gdtEntry[num].base_high   = (base >> 24) & 0xFF;
  
  gdtEntry[num].limit_low   = limit & 0xFFFF;
  gdtEntry[num].granularity = (limit >> 16) & 0x0F;
  
  gdtEntry[num].granularity |= 0 & 0xF0;
  
  gdtEntry[num].access      = 0xE9;

  Kernel::memset((void *)&tssEntry, 0, sizeof(TssEntry));

  tssEntry.ss0              = (u32int) ss0;
  tssEntry.esp0             = esp0;
  tssEntry.cs               = 0x0b;
  tssEntry.ss               = 0x13;
  tssEntry.ds               = 0x13;
  tssEntry.es               = 0x13;
  tssEntry.gs               = 0x13;
  
  tssEntry.iomap_base       = iomap_base;
}

void DescriptorTables::setKernelStack(Address stack)
{
  tssEntry.esp0 = stack;
  writeMsr(0x175, 0, stack);
}

void DescriptorTables::initSyscalls()
{
}
